#include "StdAfx.h"
#include "VSqlQuery.h"

// VSqlQuery //////////////////////////////////////////////////////////////////

//
bool VSqlQuery::setValueIn(const QString& name,const QVariant& value) 
{
	VField* field = fieldPtr(mParamsIn,name);
	if (field) 
	{
		field->setValue(value);
		return true;
	}
	return false;
}

//
QVariant VSqlQuery::valueIn(const QString& name) const {
	VField* field = fieldPtr(mParamsIn,name);
	if (field) {
		return field->value();
	}
	return QVariant();
}

//
QVariant VSqlQuery::valueOut(const QString& name) const {
	VField* field = fieldPtr(mParamsOut,name);
	if (field) {
		return field->value();
	}
	return QVariant();
}

//
bool VSqlQuery::exec() {
	for (int i = 0; i < mParamsIn.count(); i++) {
		mQuery.bindValue(i,fieldPtr(mParamsIn,i)->value());
	}
	
	return mQuery.exec();
}

//
bool VSqlQuery::next() { 
	if (!mQuery.next()) {
		return false;
	}
	
	for (int i = 0; i < mParamsOut.count(); i++) {
		fieldPtr(mParamsOut,i)->setValue(mQuery.value(i));
	}

	return true;
}

//
VField* VSqlQuery::fieldPtr(const QList<VField>& fields,const QString& name)
{
	for (int i = 0; i < fields.count(); i++) {
		VField *field = const_cast<VField*>(&fields[i]);
		if (0 == field->name().compare(name,Qt::CaseInsensitive)) {
			return field;
		}
	}
	return NULL;
}
